Mínimos cuadrados

En esta práctica vamos a utilizar el método de mínimos cuadrados, para interpolar un conjunto de datos, en una función lineal, a continuación declaramos un conjunto de datos en arreglos de numpy, para facilitarnos su manejo:


In [ ]:
from numpy import array, linspace

In [ ]:
xs = array([0, 2, 3, 6, 7])
ys = array([0.120, 0.153, 0.170, 0.225, 0.260])

Ahora, tan solo tenemos que obtener información de estos datos,

  • $m$ será el número de datos a interpolar
  • $\sum{x}$ se refiere a la sumatoria de todos los valores de la variable independiente
  • $\sum{y}$ se refiere a la sumatoria de todos los valores de la variable dependiente
  • $\sum{x^2}$ se refiere a la sumatoria de todos los valores de la variable independiente elevados al cuadrado
  • $\sum{xy}$ se refiere a la sumatoria de todos los valores de la variable independiente multiplicados por el valor de la variable dependiente en ese punto

In [ ]:
m = len(xs)
Σx = sum(xs)
Σy = sum(ys)
Σx2 = sum(xs.T*xs)
Σxy = sum(xs.T*ys)

Σx, Σy, Σx2, Σxy

Una vez que tenemos todos estos valores, tan solo utilizamos las ecuaciones derivadas por el método de Cramer, para obtener el valor de $a_0$ y $a_1$:


In [ ]:
a0 = (Σy*Σx2 - Σx*Σxy)/(m*Σx2 - Σx**2)
a1 = (m*Σxy - Σy*Σx)/(m*Σx2 - Σx**2)

y obtener la función de la interpolación:


In [ ]:
f = lambda x: a0 + a1*x

De la misma manera que en la práctica anterior, podemos obtener un espacio lineal y gráficarlo en conjunto con los datos originales como puntos:


In [ ]:
x = linspace(min(xs), max(xs), 100)
y = f(x)

In [ ]:
from matplotlib.pyplot import plot, figure
%matplotlib inline

In [ ]:
plot(xs, ys, "o")
plot(x, y)

Note que los datos no estan realmente en la gráfica de la interpolación, estamos interpolando una función lineal, en un conjunto de datos que no pueden ser unidos por una sola recta; sin embargo, tenemos garantizado que el error general de esta interpolación es el mínimo.

Problemas

  1. Obtenga una función que devuelva una función polinómica lineal de la interpolación de los datos de entrada. Utilice el método de mínimos cuadrados.
  2. Obtenga la aproximación polinomial lineal del problema 4.30 del libro de texto, ubicado en la pagina 394.
  3. Utilizando el siguiente código para importar los datos, obtenga una aproximación lineal del flujo histórico en el rio Nilo y haga una predicción para el flujo a ocurrir en el año 2018.

In [ ]:
import json
datos = None
with open('datos.json') as archivo:
     datos = json.load(archivo)
        
año, flujo = datos[0], datos[1]